package com.xh.baselibrary.tts

/**
TTS 播报策略
支持定义优先级，同等优先级顺序播放，下一个高优先级是否需要打断低优先级播放，
TTS播报回调有：播报开始，播报被取消，播报结束
是否需要打断当前播报->只有当优先级大于或等于当前正在播放的TTS时，才起效
 同一优先级队列里 isBreaking = true 优先级更高
 */
class TTSEngine {
    val dispatcher: TTSDispatcher = TTSDispatcher(this)
    val ttsPlayer = TTSPlayer(this)

    fun enqueue(ttsRequest: TTSRequest){
        ttsRequest.ttsEngine = this
        dispatcher.addTTSQueue(ttsRequest)
        if(ttsRequest.isBreaking){
            //需要被打断
            if(ttsPlayer.isPlaying){
                val currRequest = ttsPlayer.currentTTSRequest
                if( currRequest!= null){
                    if(currRequest.priority < ttsRequest.priority){
                        //当前播报的TTS优先级比即将播报的TTS优先级低
                        ttsPlayer.cancelTTS(currRequest)
                    }
                }
            }
        }
    }

    fun cancelRequest(ttsRequest: TTSRequest){
        dispatcher.removeFromQueue(ttsRequest)
        ttsPlayer.cancelTTS(ttsRequest)
    }
}